package me.yangzhi.day07;

import android.content.Intent;
import android.os.Bundle;
import android.widget.SearchView;

import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import java.util.ArrayList;
import java.util.List;

/**
 * 主活动类 - 显示新闻列表和搜索功能
 * 这个活动是应用程序的入口点，展示了一个可搜索的新闻列表
 */
public class MainActivity extends AppCompatActivity {
    private RecyclerView newsRecyclerView;
    private SearchView searchView;
    private NewsRecyclerAdapter newsAdapter;
    private List<News> newsList;
    private List<News> filteredNewsList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EdgeToEdge.enable(this);  // 启用边缘到边缘显示，使应用充分利用屏幕空间
        setContentView(R.layout.activity_main);
        
        // 设置Toolbar作为应用栏
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        // 初始化所有视图组件
        initViews();
        
        // 初始化新闻数据
        initData();
        
        // 设置新闻列表适配器
        setupRecyclerView();
        
        // 设置搜索功能
        setupSearchView();
    }

    /**
     * 初始化视图组件
     * 通过findViewById获取布局中的视图引用
     */
    private void initViews() {
        newsRecyclerView = findViewById(R.id.newsRecyclerView);
        searchView = findViewById(R.id.searchView);
    }

    /**
     * 初始化新闻数据
     * 创建示例新闻数据并添加到列表中
     */
    private void initData() {
        newsList = new ArrayList<>();
        // 添加示例新闻数据，每条新闻包含标题、摘要、来源、日期和图片资源ID
        newsList.add(new News("Android 14 正式发布", "Google 发布了最新的 Android 14 操作系统，带来了多项新特性...", "Google", "2023-10-04", R.drawable.android14));
        newsList.add(new News("人工智能助力医疗发展", "AI 技术在医疗领域的应用正在改变传统的诊疗方式...", "科技日报", "2023-10-03", R.drawable.ai));
        newsList.add(new News("新能源汽车销量创新高", "2023年第三季度新能源汽车销量同比增长超过50%...", "汽车之家", "2023-10-02", R.drawable.su7));
        newsList.add(new News("5G 网络覆盖范围扩大", "全国主要城市5G网络覆盖率已达到90%以上...", "通信世界", "2023-10-01", R.drawable.network));
        newsList.add(new News("量子计算取得重大突破", "科学家在量子计算领域取得重要进展，计算能力提升显著...", "科学前沿", "2023-09-30", R.drawable.quantum));
        newsList.add(new News("全球气候变化会议召开", "各国代表齐聚一堂，共同商讨应对气候变化的新举措...", "环球时报", "2023-09-29", R.drawable.climate));
        newsList.add(new News("可穿戴设备市场增长迅速", "智能手表和健康监测设备的销量在过去一年增长了80%...", "数码评测", "2023-09-28", R.drawable.outside));
        newsList.add(new News("太空探索新发现", "NASA的新探测器在火星表面发现了新的水源证据...", "科学美国人", "2023-09-27", R.drawable.space));
        newsList.add(new News("全球芯片供应链重构", "芯片产业链正在经历重大变革，多国加大投资力度...", "半导体周刊", "2023-09-26", R.drawable.cpu));
        newsList.add(new News("机器人送货服务扩展", "无人配送机器人已在多个城市投入使用，效率显著提升...", "未来科技", "2023-09-24", R.drawable.robot));


        // 初始化过滤列表，最初包含所有新闻
        filteredNewsList = new ArrayList<>(newsList);
    }

    /**
     * 设置搜索视图的功能
     * 实现实时搜索，根据用户输入过滤新闻列表
     */
    private void setupSearchView() {
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                // 当用户提交搜索时的处理（这里不需要特别处理）
                return false;
            }

            @Override
            public boolean onQueryTextChange(String newText) {
                // 当搜索文本改变时，实时过滤列表
                filteredNewsList.clear();
                if (newText.isEmpty()) {
                    // 如果搜索框为空，显示所有新闻
                    filteredNewsList.addAll(newsList);
                } else {
                    // 否则，根据标题或摘要匹配搜索文本
                    for (News news : newsList) {
                        if (news.getTitle().toLowerCase().contains(newText.toLowerCase()) ||
                            news.getSummary().toLowerCase().contains(newText.toLowerCase())) {
                            filteredNewsList.add(news);
                        }
                    }
                }
                // 更新适配器数据，刷新列表显示
                newsAdapter.updateData(filteredNewsList);
                return true;
            }
        });
    }

    private void setupRecyclerView() {
        newsRecyclerView.setLayoutManager(new LinearLayoutManager(this));
        newsAdapter = new NewsRecyclerAdapter(this, newsList, news -> {
            Intent intent = new Intent(MainActivity.this, NewsDetailActivity.class);
            intent.putExtra("news", news);
            startActivity(intent);
        });
        newsRecyclerView.setAdapter(newsAdapter);
    }
}